import { Router } from 'vue-router'
import { useUserStore } from '../../store/user'
import { useRoleStore, ROLE_CODES } from '../../store/role'
import { ElMessage } from 'element-plus'

// 缓存已验证的角色路径
const validatedRolePaths = new Set<string>()
const invalidRolePaths = new Set<string>()

export function createRoleGuard(router: Router) {
  router.beforeEach(async (to, from, next) => {
    // 记录开始时间，用于性能分析
    const startTime = Date.now()
    
    // 如果路由没有设置角色要求，直接放行
    if (!to.meta?.requiredRoles || (Array.isArray(to.meta.requiredRoles) && (to.meta.requiredRoles as string[]).length === 0)) {
      return next()
    }
    
    const userStore = useUserStore()
    const roleStore = useRoleStore()
    
    // 如果用户未登录，不需要进行角色检查
    if (!userStore.isLoggedIn) {
      return next()
    }
    
    // 获取用户角色
    const userRoles = userStore.getUserInfo.roles || []
    
    // 超级管理员可以访问所有页面
    const isSuperAdmin = userRoles.includes(ROLE_CODES.SUPER_ADMIN)
    if (isSuperAdmin) {
      return next()
    }
    
    // 如果用户没有角色，拒绝访问
    if (userRoles.length === 0) {
      ElMessage.error('您没有访问此页面的角色权限')
      return next({ name: '403', query: { path: to.fullPath } })
    }
    
    // 获取路由所需角色
    const requiredRoles = to.meta.requiredRoles as string[]
    
    // 检查用户是否有任一所需角色
    const hasRequiredRole = userRoles.some(role => requiredRoles.includes(role))
    
    if (hasRequiredRole) {
      // 有权限，放行
      const endTime = Date.now()
      console.log(`[Role Guard] 角色检查耗时: ${endTime - startTime}ms`)
      return next()
    } else {
      // 没有权限，拒绝访问
      ElMessage.error('您没有访问此页面的角色权限')
      return next({ name: '403', query: { path: to.fullPath } })
    }
  })
} 